﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//int main()
//{
//	int* pf = (int*)malloc(sizeof(int));//动态开辟int*类型的四个字节空间
//	if (pf == NULL)
//	{
//		perror("malloc:");
//		exit(1);
//	}
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		*(pf + i) = i + 1;
//	}
//	for (i = 0; i < 5; i++)
//	{
//		printf("%d ", *(pf + i));
//	}
//	free(pf);//释放和回收
//	pf = NULL;
//	return 0;
//}

//int main() 
//{
//    // 分配能存储10个int的内存
//    int* arr = (int*)malloc(10 * sizeof(int));
//	//检查
//    if (arr == NULL) 
//	{
//        printf("内存分配失败\n");
//        return 1;
//    }
//    // 使用分配的内存
//    for (int i = 0; i < 10; i++) {
//        arr[i] = i * 10;
//    }
//    for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//    // 释放内存
//    free(arr);
//    arr = NULL;//规避野指针
//    return 0;
//}

//int main()
//{
//	//动态开辟10个int大小的空间
//	int* pf = (int*)calloc(10,sizeof(int));
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", *(pf + i));
//	}
//	return 0;
//}

//int main()
//{
//	int* ptr = (int*)malloc(10*sizeof(int));//动态申请空间
//	if (ptr != NULL)
//	{
//		//使用申请的空间
//	}
//	//调整内存,同时将调整后的空间的起始地址先用pf接收，防止调整空间失败而丢失数据
//	int* pf = (int*) realloc(ptr,20 * sizeof(int));
//	if (pf != NULL);
//	{
//		ptr = pf;//检查pf不为空指针，然后将ptr指针指向新空间
//	}
//	//使用新空间
//	free(ptr);//释放
//	ptr = NULL;
//	return 0;
//}

//void test()
//{
//	int* pf = (int*)malloc(10 * sizeof(int));
//	if (pf != NULL)
//	{
//		for (int i = 0; i <= 10; i++)
//		{
//			*(pf + i) = i + 1;
//		}
//	}
//	free(pf);
//	pf = NULL;
//}

//struct _iobuf 
//{
//	char* _ptr;
//	int   _cnt;
//	char* _base;
//	int   _flag;
//	int   _file;
//	int   _charbuf;
//	int   _bufsiz;
//	char* _tmpfname;
//};
//typedef struct _iobuf FILE;

//int main()
//{
//	FILE* pf = fopen("date.txt", "w");//以写的形式打开文件，若文件不存在则新建一个文件
//	if (pf == NULL)//检查是否打开成功
//	{
//		exit(1);
//	}
//	printf("打开文件成功，可以对文件进行操作\n");
//	fclose(pf);//关闭文件
//	pf = NULL;//规避野指针
//	return 0;
//}

////循环写入
//int main()
//{
//	FILE* pf = fopen("date.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	char ch = 0;
//	for (ch = 'a'; ch <= 'z'; ch++)
//	{
//		fputc(ch, pf);
//	}
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("date.txt", "r");//以读的形式打开文件，若文件不存在则出错
//	if (pf == NULL)//检查
//	{
//		exit(1);
//	}
//	for(int i=0;i<26;i++)//从date.txt文件读取字符
//	{
//		int ch = fgetc(pf);
//		printf("%c ", ch);
//	}
//	fclose(pf);//关闭文件
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("date.txt", "r");//"r",表示只读，只有以r的形式打开文件，fgetc()才能正确的读文件
//	if (pf == NULL){
//		perror("fopen");
//		return 1;
//	}
//	for (int i = 1; i < 7; i++){
//		int ch = fgetc(pf);
//		if (ch == EOF)
//		{
//			if (feof(pf))//文件结束指示器检测
//				printf("遇到文件末尾了\n");
//			else if (ferror(pf))
//				printf("发生了读写错误\n");
//		}
//		else
//			fputc(ch, stdout);//向标准输出流（屏幕）输出字符
//	}
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("data.txt", "r");//读的形式打开文件
//	if (pf == NULL);
//	{
//		perror("fopen");
//		return 0;
//	}
//	printf("文件打开成功\n");
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("date.txt", "w");//以写的形式打开文件
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	for(int i=0;i<5;i++)//循环写入字符串
//	{
//		int ret = fputs("abcdef\n", pf);
//		printf("%d\n", ret);
//	}
//	fclose(pf);//关闭文件
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("date.txt", "r");
//	//...检测
//	char str[100],arr[100];
//	fgets(str, 6, pf);
//	fgets(arr, 10, pf);
//	printf("%s\n", str);
//	printf("%s\n", arr);
//	//...关闭文件
//	return 0;
//}

//struct stu
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct stu s = { "zhangsang",20,85.5 };
//	FILE* pf = fopen("date.txt", "w");//"w",以写的形式打开文件
//	//...检查
//	int ret = fprintf(pf, "%s %d %.1f\n", s.name, s.age, s.score);
//	if (ret < 0){
//		if (ferror(pf)) //错误指示器检查
//			perror("fprintf");
//	}
//	else
//		printf("%d\n", ret);//18 = 所有字符个数15+3个'\0'
//	//...关闭文件
//	return 0;
//}

//struct stu
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct stu s;
//	FILE* pf = fopen("date.txt", "r");//"r",以读的形式打开文件
//	//... 检查
//	fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.score));
//	printf("%s %d %f\n", s.name, s.age, s.score);
//	//...关闭文件
//	return 0;
//}

//struct stu
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct stu s = { "zhangsan",18,95.5 };
//	FILE* pf = fopen("date.txt", "wb");//以写的形式打开一个二进制文件，如果文件不存在则新建一个文件
//	//...检查
//	fwrite(&s, sizeof(struct stu), 1, pf);
//	//...关闭文件
//	return 0;
//}

//struct stu
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct stu s;
//	FILE* pf = fopen("date.txt", "rb");//以只读的形式打开一个二进制文件，如果文件不存在则报错
//	//...检查
//	int ret = fread(&s, sizeof(struct stu), 1, pf);//假设在fwrite()学习时在文件中写入了信息
//	printf("%s %d %f\n", s.name, s.age, s.score);
//	printf("%d", ret);
//    //关闭文件
//	return 0;
//}

int main()
{
	FILE* pf = fopen("date.txt", "w");//"w"读写文件
	if (pf == NULL)
		exit(1);
	fputs("Zhoumin is pig", pf);
	fseek(pf, 7, SEEK_SET);//文件指示器从文件开头向后移动7位
	fputs("Chr", pf);//从文件指示器当前位置开始将后面的三个字符替换为Chr
	fclose(pf);
	return 0;
}


int main()
{
	FILE* pf = fopen("date.txt", "r");
	if (pf == NULL)
		exit(1);
	fseek(pf, -4, SEEK_END);
	long ret = ftell(pf);
	printf("%d\n", ret);
	fclose(pf);
	pf = NULL;
	return 0;
}
